package com.wbt.transaction;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MysqlTransactionTest {
    public static void main(String[] args) {
        Connection conn =null;
        PreparedStatement st=null;
        ResultSet rs=null;

        try {
            conn= JDBCUtils.getConnection();//获取连接

            /**
             * 操作事务：
             * 1，关闭数据库的自动提交功能；
             * 2，业务完毕，提交事务
             * 3，如果失败，就回滚事务
             */

            conn.setAutoCommit(false);//1，关闭数据库的自动提交功能；会自动开启事务

            String sql1="update account set money=money-100 where name='A'";
            st=conn.prepareStatement(sql1);
            st.executeUpdate();//执行1

            int x=1/0;//报错

            String sql2="update account set money=money+100 where name='B'";
            st=conn.prepareStatement(sql2);
            st.executeUpdate();//执行2
            //业务完毕，提交事务
            conn.commit();
            System.out.println("成功");

        } catch (SQLException e) {
            try {
                System.out.println("失败，回滚事务");
                conn.rollback();//如果失败，就回滚事务；不写也会默认回滚
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            JDBCUtils.close(st,conn,rs);
        }
    }
}
